package com.richpencil.modules.utils;

/**
 * @Classname HttpClientTool
 * @Description TODO
 * @Date 2020/7/30 16:20
 * @Created by Administrator
 */

import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * @author 赵春成
 * HttpClient工具类
 */
public class HttpClientTool {

    /**
     * get请求
     * @return
     */
    public static String doGet(String url) throws IOException {
        HttpClient client = new DefaultHttpClient();
        //发送get请求
        HttpGet request = new HttpGet(url);
        HttpResponse response = client.execute(request);

        /**请求发送成功，并得到响应**/
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            /**读取服务器返回过来的json字符串数据**/
            String strResult = EntityUtils.toString(response.getEntity());

            return strResult;
        }

        return null;
    }

    /**
     * post请求(用于key-value格式的参数)
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, Map params) throws URISyntaxException, IOException {

        BufferedReader in = null;
        // 定义HttpClient
        HttpClient client = new DefaultHttpClient();
        // 实例化HTTP方法
        HttpPost request = new HttpPost();
        request.setURI(new URI(url));

        //设置参数
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String value = String.valueOf(params.get(name));
            nvps.add(new BasicNameValuePair(name, value));

            //System.out.println(name +"-"+value);
        }
        request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));

        HttpResponse response = client.execute(request);
        int code = response.getStatusLine().getStatusCode();
        if(code == 200){    //请求成功
            in = new BufferedReader(new InputStreamReader(response.getEntity()
                    .getContent(),"utf-8"));
            StringBuffer sb = new StringBuffer("");
            String line = "";
            String NL = System.getProperty("line.separator");
            while ((line = in.readLine()) != null) {
                sb.append(line + NL);
            }

            in.close();

            return sb.toString();
        }
        else{    //
            System.out.println("状态码：" + code);
            return null;
        }

    }

    /**
     * post请求（用于请求json格式的参数）
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, String params) throws IOException {

        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);// 创建httpPost
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-Type", "application/json");
        String charSet = "UTF-8";
        StringEntity entity = new StringEntity(params, charSet);
        httpPost.setEntity(entity);
        CloseableHttpResponse response = null;

        response = httpclient.execute(httpPost);
        StatusLine status = response.getStatusLine();
        int state = status.getStatusCode();
        if (state == HttpStatus.SC_OK) {
            HttpEntity responseEntity = response.getEntity();
            String jsonString = EntityUtils.toString(responseEntity);
            return jsonString;
        }
        else{
            //logger.error("请求返回:"+state+"("+url+")");
        }

        if (response != null) {
            response.close();
        }
        httpclient.close();

        return null;
    }

}

/*public class HttpClientTool {

    public static String doPost(String url, String params) throws IOException {
        CloseableHttpClient client = HttpClients.createDefault();    //创建一个http客户端
        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse Response = null; // 通过client调用execute方法，得到我们的执行结果就是一个response，所有的数据都封装在response里面了

        StringEntity stringEntity = new StringEntity(params);
        stringEntity.setContentType("application/x-www-form-urlencoded");
        httpPost.setEntity(stringEntity);
        Response = client.execute(httpPost);
        String content = EntityUtils.toString(Response.getEntity(), "UTF-8");
        Response.close();  // 关闭
        return content;
    }

    public static String doGet(String url) throws IOException {
        CloseableHttpClient client = HttpClients.createDefault();    //创建一个http客户端
        HttpGet httpGet = new HttpGet(url); // 通过httpget方式来实现我们的get请求
        CloseableHttpResponse Response = null; // 通过client调用execute方法，得到我们的执行结果就是一个response，所有的数据都封装在response里面了
        Response = client.execute(httpGet);
        String content = EntityUtils.toString(Response.getEntity(), "UTF-8");

        return content;
    }


}*/
